package leetcode_day._2021._202106._0110;

import general_class.ListNode;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/6/4 21:55
 * 相交链表
 * 算法：双指针  链表
 * 注意：是节点相等，不是节点的值相等
 * 主要是两个链表的长度不同，可以先分别求出两个链表的长度，求出差，
 * 然后长的链表先走差值步，与长度小的链表同时出发
 * -----------------------------------------------------------------
 * 假设两个链表相同部分的长度为 c，除相同部分长度两个链表分别为 a 和 b
 * a + c + b = b + c + a
 */
public class _04_160 {

    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if (null == headA || null == headB) return null;
        ListNode p1 = headA, p2 = headB;
        while (p1 != p2) {
            p1 = p1 == null ? headB : p1.next;
            p2 = p2 == null ? headA : p2.next;
        }
        return p1;
    }

}
